home *** CD-ROM | disk | FTP | other *** search
- |##########|
- |#MAGIC #|BOPDMNIF
- |#PROJECT #|"ImportLibs"
- |#PATHS #|"EGSProject"
- |#FLAGS #|xx-x-x--x---xxx-----------------
- |#USERSW #|--------------------------------
- |#USERMASK#|--------------------------------
- |#SWITCHES#|x--x-x----------
- |##########|
- DEFINITION MODULE EGS;
- |
- |
- | +---------------------------------------------------------------------+
- | | |##
- | | egs.library v1.0, © '92 Viona Development |##
- | | EXTENDED - GRAPHICS - STANDARD |##
- | | |##
- | +---------------------------------------------------------------------+##
- | #######################################################################
- |
- | Diese Library bildet die grundlegende Schnittstelle zu hochauflösenden
- | Graphikkarten. Die Hardware wird durch dieses Modul fast völlig
- | abgeschirmt. Es ist nicht erlaubt direkt auf Hardware - Register zu zu-
- | greifen.
- |
- | Die Library garantiert volle Multitaskingunterstützung. Es können also
- | mehrere Programme gleichzeitig die Graphikkarte benützen. Zwischen den
- | einzelnen Screens kann Amiga-Like mit LAmiga+"S" durchgschalten werden.
- |
- | Ebenfalls wird ein eigener Mauszeiger unterstützt. Zwischen der normalen
- | Amiga-Maus, und der EGS-Maus kann über LAmiga+"A" gewechselt werden.
- | Befindet sich die Maus auf dem EGS-Screen, werden auch alle Tastencodes
- | umgeleitet.
- |
- | EGS-Screens verfügen über ein eigenes Nachrichtensystem, so daß bei
- | Anwendungen mit eigener Eingabenverwaltung auf ein Fenster verzichtet
- | werden kann, das Multitasking aber erhalten bleibt.
- |
- FROM Input IMPORT QualifierSet;
- FROM Exec IMPORT MsgPortPtr,Message,LibraryPtr,Node;
- FROM System IMPORT Regs,SysStringPtr,LONGSET;
- |
- | EMemNode, EMemPtr..
- |
- | Listenstruktur, in der die allozierten Speicherstücke gehalten werden.
- | Dabei sind für den Benutzer nur die Felder "dest" und "lock" freigegeben.
- | "dest" enthält die Adresse des allozierten Speicherstückes. Wird dieser
- | Zeiger benutzt, (z.B. in ein Adressregister geladen) muß das zugehörige
- | Speicherstück gelockt werden, damit es bei eventuellen Speicher-
- | reinigungen nicht verschoben wird. Dies geschieht dadurch, daß "lock"
- | erhöht wird.
- | "lock" muß, wenn das Speicherstück nicht mehr bearbeitet wird, wieder
- | vermindert werden.
- |
- | VAR mem : EMemNode;
- | ...
- | INC(mem.lock); <- ab hier darf mem.dest benutzt werden
- | BytePtr(mem.dest)^:=$AA
- | ...
- | DEC(EMemNode.lock); <- ab hier darf mem.dest nicht mehr benutzt
- | werden.
- |
- TYPE
- EMemPtr = POINTER TO EMemNode;
- EMemNode = RECORD
- dest : ANYPTR;
- IF KEY : BOOLEAN
- OF FALSE THEN lock : SHORTINT;
- display : BOOLEAN;
- OF TRUE THEN moveable : CARDINAL;
- END;
- size : LONGINT;
- next,
- prev : EMemPtr;
- dest24,
- disp24 : LONGINT;
- END;
- |
- | EViewPtr..
- |
- | Opaquer - Zugriff auf einen Darstellungsmodus. Enthält nur interne Daten,
- | die aus Kompatibilitätsgründen nicht exportiert werden.
- |
- EViewPtr = HIDDEN;
- |
- | CLUEntry, CLU, CLUPtr...
- |
- | Farbtabelle. Die Werte einer Farbkomponente gehen von 0 bis 255, nutzen
- | also die vollen 8 Bit aus.
- | Die Anzahl der nötigen Tabelleneinträge hängt von der gewählten Tiefe ab.
- |
- | Wird eine zu kurze Farbtabelle übergeben, werden die restlichen Farben
- | zufällig gewählt. Wird keine Farbtabelle angegeben, wird eine Standard-
- | tabelle angenommen.
- |
- CLUEntry = RECORD red,green,blue,dummy : SHORTCARD END;
- CLU = ARRAY OF CLUEntry;
- CLUPtr = POINTER TO CLU;
- |
- | EBitMapPtr, EBitMap...
- |
- | Grundlegende Struktur zur Verwaltung von Graphikspeicher.
- |
- | .width : Breite in Pixel
- | .height : Höhe in Pixel
- | .bytesPerRow : Anzahl der Bytes in einer Zeile
- | .depth : Anzahl der Bits für einen Bildpunkt,
- | im 24 Bit-Mode (Real) steht hier zwar 24, doch werden
- | immer 32 Bits (also ein Langwort) benutzt.
- | .type : Typ der BitPlane
- |
- | pixelMap : Linearer Speicher, die Farbe eines
- | Pixels wird durch aufeinanderfolgende
- | Bits gegeben.
- | Zugriff erfolgt über .planes.dest.
- | pixLaceMap : Wie oben, nur befinden sich die
- | ungeraden Zeilen eines Bildes in einem
- | extra Speicherbereich, der zum
- | eigentlichen die Entfernung .intDisp hat.
- | bitPlaneMap : Der Speicher ist in einzelne BitPlanes
- | zerlegt.
- |
- | Beispiel für Punktsetzoperationen in versch. Modi.
- |
- | PROCEDURE WritePixel(map IN A0 : EBitMapPtr;
- | c IN D0 : LONGINT;
- | x IN D1,
- | y IN D2 : INTEGER);
- | TYPE
- | BitPtr = POINTER TO SHORTSET;
- | CONST
- | Masks2 = ARRAY OF SHORTSET:(SHORTSET:{6,7},SHORTSET:{4,5},
- | SHORTSET:{2,3},SHORTSET:{0,1});
- | Masks21 = ARRAY OF SHORTSET:(SHORTSET:{0..5},SHORTSET:{6,7,0..3},
- | SHORTSET:{4..7,0,1},SHORTSET:{2..7});
- | Color2 = ARRAY OF SHORTSET:(SHORTSET:{},SHORTSET:{0,2,4,6},
- | SHORTSET:{1,3,5,7},SHORTSET:{0..7});
- | VAR
- | dest IN A1 : LONGINT;
- | BEGIN
- | INC(map^.planes.lock);
- | dest:=map^.planes.dest+LMUL(map^.bytesPerRow,y);
- |
- | IF KEY map^.depth
- | OF 8 THEN BytePtr(dest+x)^:=c END
- | OF 1 THEN INCL(BitPtr(dest+x DIV 8)^,7-(x MOD 8)) END
- | OF 24 THEN LongPtr(dest+x*4+20)^:=c END
- | OF 2 THEN
- | (* $W- *)
- | WITH BitPtr AS p DO
- | p:=BitPtr(dest+x DIV 4);
- | x:=x MOD 4;
- | p^:=p^*Masks21[x]+Color2[c]*Masks2[x]
- | END
- | END
- | OF 4 THEN
- | (* $W- *)
- | WITH BitPtr AS p DO
- | p:=BitPtr(dest+x DIV 2);
- | IF ODD(x) THEN
- | p^:=p^*SHORTSET:{4..7}+CAST(SHORTSET,SHORTCARD(c MOD 16))
- | ELSE
- | p^:=p^*SHORTSET:{0..3}+CAST(SHORTSET,SHORTCARD(c MOD 16)*16);
- | END
- | END
- | END
- | END;
- | DEC(map^.planes.lock);
- | END WritePixel;
- |
- EBitMapType= (pixelMap,pixLaceMap,bitPlaneMap,userMap,pixelMap_xRGB);
- EBitMapPtr = POINTER TO EBitMap;
- EBitMap = RECORD
- width,
- height,
- bytesPerRow : INTEGER;
- depth : SHORTINT;
- IF KEY type : EBitMapType
- OF pixelMap,
- pixLaceMap THEN
- planes : EMemNode;
- intDisp : LONGINT;
- OF bitPlaneMap THEN
- pad0 : LONGINT;
- IF KEY : BOOLEAN
- OF FALSE THEN lock : SHORTINT;
- display : BOOLEAN;
- OF TRUE THEN moveable : CARDINAL;
- END;
- pad1 : INTEGER;
- bitPlanes : ARRAY [24] OF ANYPTR;
- OF userMap THEN
- actions : ANYPTR;
- END
- END;
-
- (* PRIVATE *)
- MouseExcept = PROCEDURE(VAR x,y : INTEGER;data : ANYPTR):BOOLEAN;
- |
- | SoftMousePtr, SoftMouse, HardMousePtr, HardMouse...
- |
- | Datenblock für den Mauszeiger. Es können drei Farben verwendet werden.
- | Die beiden Bits eines Punktes stehen wie üblich direkt hintereinander,
- | die Kombination %00 steht für einen durchsichtugen Punkt.
- |
- | Die maximale Größe eines Software-Mauszeigers ist 32x32. Bei einem
- | Hardware Mauszeiger, könnten 64x64 verwendet werden, dies würde aber
- | den Prozessor bei einer Emulation total überlasten.
- |
- | EMouse, EMousePtr...
- |
- | Definitionsstruktur für einen Mauszeiger. Jede Screen kann zu jedem
- | Zeitpunkt immer nur einen Mauszeiger haben. Bei einem Screenwechsel,
- | wird der Mauszeiger entsprechend gewechselt. Der Mauszeiger einer
- | Screen kann jederzeit über einen Befehl gewechselt werden.
- |
- | Bei einer Graphikkarte ohne Hardware Maus, wird eine über Software
- | emuliert. Eine angegebene HardMouse-Struktur wird nur verwendet,
- | wenn auch eine Hardware Maus implementiert ist. Ist .soft = NIL,
- | wird automatisch die SoftMouse-Struktur in eine HardMouse-Struktur
- | umgewandelt (in Planung !!!)
- |
- | .color1 : Farbe für %01
- | .color2 : Farbe für %10
- | .color3 : Farbe für %11.
- | Diese Farbwerte werden erst ab dem 4Bit Mode unterstützt
- | .xSpot,
- | .ySpot : Displacement auf "Click"-Punkt der Maus
- | .width,
- | .height : Breite und höhe der SoftMouse
- | .soft : Zeiger auf SoftMouse Struktur, sollte aus
- | kompatibilitätsgründen immer initialisiert sein
- | .hard : Zeiger auf HardMouse Struktur, soll immer
- | die kleine Maus verwendet werden, muß hier
- | NIL stehen.
- |
- | Beispiel : Der Standard-Mauszeiger
- |
- | StdMouse= EMouse:(color1=$00000001,color2=$FF0000FF,color3=$80000080,
- | xSpot=1,ySpot=1,width=25,height=31,
- | soft=SoftMouse:(
- | (%01010101000000000000000000000000,%00000000000000000000000000000000),
- | (%01111111010101010000000000000000,%00000000000000000000000000000000),
- | (%01111010111111110101010100000000,%00000000000000000000000000000000),
- | (%01111111101010101111111101010101,%00000000000000000000000000000000),
- | (%00011111111110101010101011110100,%00000000000000000000000000000000),
- | (%00011111111111111110101011010000,%00000000000000000000000000000000),
- | (%00011111111111111111111101000000,%00000000000000000000000000000000),
- | (%00011111111111111111110100000000,%00000000000000000000000000000000),
- | (%00010111111111111111101101000000,%00000000000000000000000000000000),
- | (%00000111111111111111111011010100,%00000000000000000000000000000000),
- | (%00000111111111111111111110111101,%00000000000000000000000000000000),
- | (%00000111111111011111111111101111,%01000000000000000000000000000000),
- | (%00000101111101010111111111111011,%11010100000000000000000000000000),
- | (%00000001110101010101111111111110,%10111101000000000000000000000000),
- | (%00000001010101010101111111111111,%11101011010000000000000000000000),
- | (%00000001010101010101011111111111,%11111010110101000000000000000000),
- | (%00000001010101010101010111111111,%11111111101111010000000000000000),
- | (%00000001010101010101010101111111,%11111111111101000000000000000000),
- | (%00000001010101010101010101111111,%11111111010100000000000000000000),
- | (%00000000010101010001010101011111,%11111101000000000000000000000000),
- | (%00000000010101000000010101010111,%11110101010000000000000000000000),
- | (%00000000010100000000010101010101,%11110101010100000000000000000000),
- | (%00000000010000000000000101010101,%11010101010101010000000000000000),
- | (%00000000000000000000000001010101,%01010101010101010100000000000000),
- | (%00000000000000000000000000010101,%01010101010101010000000000000000),
- | (%00000000000000000000000000010101,%01010101010101000000000000000000),
- | (%00000000000000000000000000000101,%01010101010000000000000000000000),
- | (%00000000000000000000000000000001,%01010101000000000000000000000000),
- | (%00000000000000000000000000000000,%01010101000000000000000000000000),
- | (%00000000000000000000000000000000,%01010100000000000000000000000000),
- | (%00000000000000000000000000000000,%00010000000000000000000000000000),
- | (%00000000000000000000000000000000,%00000000000000000000000000000000))'PTR);
- |
- HardMousePtr = POINTER TO HardMouse;
- HardMouse = ARRAY [0..63],[0..3] OF LONGINT;
-
- SoftMousePtr = POINTER TO SoftMouse;
- SoftMouse = ARRAY [0..31],[0..1] OF LONGINT;
-
- EMousePtr = POINTER TO EMouse;
- EMouse = RECORD
- color1,
- color2,
- color3 : LONGINT;
- xSpot,
- ySpot : INTEGER;
- width,
- height : INTEGER;
- soft : SoftMousePtr;
- hard : HardMousePtr;
- END;
- |
- EScreenPtr = POINTER TO EScreen;
- |
- | EDCMPFlags, EDCMPFlagSet, EGSMsgPtr, EGSMessage
- |
- | Strukturen für das Nachrichtensystem, die direkt auf Screen-Ebene arbeiten.
- | Somit können Maus- und Zeicheneingaben erhalten werden, ohne ein Window
- | verwenden zu müssen.
- |
- | EDCMPFlags:
- | eMouseButtons : Betätigen der Mausknöpfe
- | eMouseMove : Bewegen der Maus
- | eRawKey : Zeichencode von der Tastatur
- | eTimeTick : Meldungen vom Timer
- |
- | .class : Typ der Meldung
- | .code : Inhalt der Meldung (siehe "InputEvents..");
- | .qualifier : " "
- | .iAddress : ???
- | .mouseX,
- | .mouseY : Mausposition
- | .second,
- | .micros : Event-Zeitpunkt
- | .edcmpScreen : Screen, von dem die Meldung kommt.
- |
- EDCMPFlags = (eMouseButtons,eMouseMove,eRawKey,eTimeTick,
- eDiskInserted,eDiskRemoved,eNewPrefs,
- ed7,ed8,ed9,ed10,ed11,ed12,ed13,ed14,ed15,ed16);
- EDCMPFlagSet = SET OF EDCMPFlags;
- EGSMsgPtr = POINTER TO EGSMessage;
- EGSMessage = RECORD OF Message
- class : EDCMPFlagSet;
- code : CARDINAL;
- qualifier : QualifierSet;
- iAddress : ANYPTR;
- mouseX,
- mouseY : INTEGER;
- seconds,
- micros : LONGCARD;
- edcmpScreen : EScreenPtr;
- END;
- |
- | EScrFlags, EScrFlagSet, EScreen, EScreenPtr, NewEScreen...
- |
- | EScreens sind Strukturen, die folgende Fähigkeiten vereinigen:
- |
- | - Verwaltung des Auflösungsmodus (EViewPtr)
- | - Verwaltung des Graphikspeichers (EBitMap)
- | - Nachrichtensystem für Benutzereingaben
- |
- | EScrFlags
- | screenBehind : Die neue Screen wird hinter allen anderen geöffnet
- | ownBitMap : Die Screen hat eine Benutzerdefinierte BitMap
- | laceScreen : der Screen soll trotz besseren Wissens als
- | InterlaceScreen geöffnet werden (um die Zeilenfrequenz
- | zu vermindern (noch bedeutungslos).
- |
- | NewEScreen
- | .mode : Name des gewünschten Bildschirmmodus, mit &0
- | am Ende (0C ...)
- | .depth : gewünschte Bittiefe (1,2,4,8 oder 24)
- | .colors : falls gewünscht eine eigene Farbtabelle, bei NIL wird
- | die Standardtabelle verwendet.
- | .map : Auf Wunsch eine eigene BitMap, die vorher alloziert
- | sein muß.
- | .flags : Flags für die neue Screen (nur "screenBehind")
- | .mouse : Auf Wunsch eine eigene Maus
- | .edcmpFlags : Nachrichtenkanäle
- | .port : Auf Wunsch ein eigener Nachrichtenport, dieser
- | muß wieder entfernt werden, bevor die Screen
- | geschlossen wird.
- |
- EScrFlags = (screenBehind,ownBitMap,laceScreen,
- sf3,sf4,sf5,sf6,sf7,sf8,sf9,sf10,sf11,
- sf12,sf13,sf14,sf15,sf16);
- EScrFlagSet = SET OF EScrFlags;
- NewEScreen = RECORD
- mode : SysStringPtr;
- depth : CARDINAL;
- colors : CLUPtr;
- map : EBitMapPtr;
- flags : EScrFlagSet;
- mouse : EMousePtr;
- edcmpFlags : EDCMPFlagSet;
- port : MsgPortPtr;
- END;
- |
- | EScreen
- | .prev,
- | .next : interne Verkettung
- | .view : !!!! PRIVAT !!!!
- | .map : Zeiger auf die BitMap-Struktur des Screens
- | .colors : !!!! PRIVAT !!!!
- | .mouse : EMouse-Struktur (READ ONLY !!!!)
- | .mouseOn : !!!! PRIVAT !!!!
- | .edcmpFlags : Nachrichtenkanäle (READ ONLY !!!)
- | .port : Nachrichtenport der Screen
- | .backLink : Verkettungsfeld für Benutzer, wird z.B. von EGSIntui
- | verwendet.
- |
- EScreen = RECORD
- prev,
- next : EScreenPtr;
- view : EViewPtr;
- map : EBitMapPtr;
- colors : CLUPtr;
- mouse : EMousePtr;
- flags : EScrFlagSet;
- mouseOn : SHORTCARD;
- edcmpFlags : EDCMPFlagSet;
- port : MsgPortPtr;
- backLink : ANYPTR;
- mouseX,
- mouseY : INTEGER;
- iScreen : ANYPTR;
- END;
- |
- | G300Contorl, G300ControlSet, MonitorPref,
- | HelpModePtr, HelpMode, ScreenMode, ScreenModePtr
- |
- | PRIVAT, dienen dazu während des Betriebs neue Screenmodes zu erezeugen,
- | oder zu ändern.
- |
- G300Control = (enableVTG,interlaced,slaveMode,plainSync,
- separateSync,videoOnly,res0,byteMode,
- mode2,delay0,delay1,delay2,
- blackLevel,res1,noVideoRam,blankTest,
- cBlankOut,bitsPix0,bitsPix1,addrStep0,
- addrStep1,ccirLace,res2,undelayClk);
- G300ControlSet = SET OF G300Control;
-
- MonitorPref = RECORD
- MaxLineFreq : CARDINAL; | 1/10KHz
- MaxPixFreq : CARDINAL; | 1/100MHz
- HSync, | 10ns
- HBack, | 10ns
- HFront : CARDINAL; | 10ns
- VSync, | 100ns
- VBack, | 100ns
- VFront : CARDINAL; | 100ns
- control : G300ControlSet;
- END;
-
- HelpModePtr = POINTER TO HelpMode;
- HelpMode = RECORD
- lace : BOOLEAN;
- extSync : BOOLEAN;
- PixFreq : CARDINAL; | 1/100MHz
- HSync,
- HBack,
- HFront : CARDINAL; | in Pixel
- VSync,
- VBlank,
- dummy1,
- dummy2 : CARDINAL; | in Lines
- END;
-
- ScreenModePtr = POINTER TO ScreenMode;
- ScreenMode = RECORD OF Node
- horiz,
- vert : CARDINAL;
- depths : LONGSET;
- IF KEY type : (generic,standard,monitor)
- OF generic THEN lace : BOOLEAN;
- OF standard THEN pseudo,
- real : HelpMode
- END;
- END;
-
- VAR
- EGSBase : LibraryPtr;
- |
- | OpenScreen(VAR scr IN A0 : NewEScreen):EScreenPtr;
- |
- | Öffnet einen EGS-Screen, anhand der Daten der NewEScreen-Struktur.
- | Kann der Screen nicht geöffnet werden (Speicher, Monitor oder Modus),
- | wird NIL zurückgegeben.
- |
- | Beispiel:
- |
- | VAR scr : EGS.EScreenPtr;
- |
- | BEGIN
- | scr:=NIL;
- | scr:=OpenScreen(NewEScreen:(mode="800x600".data'PTR,depth=2));
- | IF scr#NIL THEN
- | ...
- | ELSE
- | HALT(4711)
- | END;
- | CLOSE
- | IF scr#NIL THEN CloseScreen(scr);scr:=NIL END;
- | END ...
- |
- LIBRARY EGSBase BY -30 PROCEDURE OpenScreen(VAR scr IN A0 : NewEScreen):EScreenPtr;
- |
- | CloseScreen(scr IN A0 : EScreenPtr);
- |
- | Schließt einen EGS-Screen. War dies er letzte Screen, wird die Maus
- | automatisch wieder auf den Amiga-Bildschirm geschaltet.
- |
- LIBRARY EGSBase BY -36 PROCEDURE CloseScreen(scr IN A0 : EScreenPtr);
- |
- | MouseOn(scr IN A0 : EScreenPtr);
- | MouseOff(scr IN A0 : EScreenPtr);
- |
- | Bei Verwendung einer Software-Maus, muß diese während Graphikoperationen
- | auf die Bitmap der Screen abgeschaltet werden. Dieses Ab- und Anschalten
- | der Maus wird bei einer Hardware-Maus ignoriert. Soll die Maus sicher
- | weggschaltet werden, muß "ActivateAmigaScreen" verwendet werden.
- |
- | Wird die Maus mehrere Sekunden nicht bewegt, und wird MouseOff() aufgerufen,
- | wird sie beim korrespondierenden MouseOn() nicht wieder angeschaltet. Sie
- | erscheint erst wieder, wenn sie bewegt wird.
- |
- | MouseOff() und MouseOn() sind schachtelbar, es können also gefahrlos
- | mehrere Schachtelungen auftreten (um bei einer komplexen Zeichnung
- | nicht für jedes Element die Maus ab- und anschalten zu müssen).
- |
- | Jedes MouseOff() muß durch ein korrespondierendes MouseOn() wieder
- | deaktiviert werden.
- |
- | Beispiel:
- |
- | ...
- | FOR i:=0 TO 599 DO
- | MouseOff(scr);
- | WritePixel(scr^.map,3,i,i);
- | MouseOn(scr);
- | END;
- | ...
- |
- | oder besser:
- |
- | ...
- | MouseOff(scr);
- | FOR i:=0 TO 599 DO
- | WritePixel(scr^.map,3,i,i);
- | END;
- | MouseOn(scr);
- | ...
- |
- LIBRARY EGSBase BY -42 PROCEDURE MouseOn(scr IN A0 : EScreenPtr);
- LIBRARY EGSBase BY -48 PROCEDURE MouseOff(scr IN A0 : EScreenPtr);
- |
- | ModifyMouse(scr IN A0 : EScreenPtr;mouse IN A1 : EMousePtr);
- |
- | Ändert den Mauszeiger der Angegebenen Screen. Dies ist der einzig
- | erlaubte Weg, ein einfaches Ändern des .mouse-Eintrags in der Screen,
- | ist Illegal und absolut verboten !!!
- |
- LIBRARY EGSBase BY -54 PROCEDURE ModifyMouse(scr IN A0 : EScreenPtr;mouse IN A1 : EMousePtr);
- |
- | ScreenToFront(scr IN A0 : EScreenPtr);
- |
- | Schaltet den angegebenen Screen in den Vordergrund.
- |
- LIBRARY EGSBase BY -60 PROCEDURE ScreenToFront(scr IN A0 : EScreenPtr);
- |
- | ScreenToBack(scr IN A0 : EScreenPtr);
- |
- | Schaltet den angegebenen Screen in den Hintergrund.
- |
- LIBRARY EGSBase BY -66 PROCEDURE ScreenToBack(scr IN A0 : EScreenPtr);
- |
- | ActivateEGSScreen;
- |
- | Aktiviert den EGS-Screen, (bewegt die Maus auf die EGS-Screen), hat
- | keine Wirkung, wenn die EGS-Screen bereits aktiv ist.
- |
- LIBRARY EGSBase BY -72 PROCEDURE ActivateEGSScreen;
- |
- | ActivateAmigaScreen;
- |
- | Reaktiviert den AmigaScreen, hat keine Wirkung, wenn der Amiga-Screen
- | bereits aktiv ist.
- |
- LIBRARY EGSBase BY -78 PROCEDURE ActivateAmigaScreen;
- |
- | ModifyEDCMP(scr IN A0 : EScreenPtr;flags IN D0 : EDCMPFlagSet);
- |
- | Ändert den Zustand des Datenkanals. Ist kein Flag gesetzt, wird der Port
- | geschlossen. Ist ein eigener Port eingehängt sollte dieser vorher
- | entfernt werden.
- |
- LIBRARY EGSBase BY -90 PROCEDURE ModifyEDCMP(scr IN A0 : EScreenPtr;
- flags IN D0 : EDCMPFlagSet);
- |
- | AllocEMem(VAR mem IN A1 : EMemNode;
- | Size IN D1 : LONGINT):BOOLEAN;
- |
- | Alloziert Speicher auf der Graphikkarte, falls eine BitMap-Struktur
- | auf eigene Faust erstellt werden soll. Dazu muß eine EMenNode-Struktur
- | übergeben werden. Sie darf nicht auf dem Stack liegen, oder durch
- | das Programm überschrieben werden, solange der Speicher belegt ist.
- | Kann genügend Speicher alloziert werden, wird "TRUE" zurückgegeben.
- |
- | Die EGS-Speicherverwaltung sieht Graphik-Speicher als wichtige
- | Resource an. Deshalb werden Speicherstücke bei Bedarf im Graphikberreich
- | verschoben, um größere Speicherstücke zu gewinnen. Um zu verhindern, daß
- | einem während der Arbeit der Speicher unter den Füßen weggeschoben wird,
- | muß der Speicher vor dem Zugriff gelockt werden. Siehe dazu die
- | Strukturbeschreibung.
- |
- | Mit AllocEMem allozierter Speicher, muß mit "DisposeEMem" wieder frei-
- | gegeben werden.
- |
- LIBRARY EGSBase BY -96 PROCEDURE AllocEMem(VAR mem IN A1 : EMemNode;
- Size IN D1 : LONGINT):BOOLEAN;
- |
- | DisposeEMem(VAR mem IN A1 : EMemNode);
- |
- | Gibt mit "AllocEMem" allozierten Speicher wieder zurück. Es muß keine
- | Länge mit angegeben werden, da diese in der EMemNode enthalten ist.
- |
- LIBRARY EGSBase BY-102 PROCEDURE DisposeEMem(VAR mem IN A1 : EMemNode);
- |
- | PRIVAT, unter Androhung der Todesstrafe für Freaks verboten !!!!
- |
- LIBRARY EGSBase BY-108 PROCEDURE AddScreenMode(VAR Mode IN A0 : ScreenMode);
- LIBRARY EGSBase BY-114 PROCEDURE DelScreenMode(Mode IN A0 : SysStringPtr);
- LIBRARY EGSBase BY-120 PROCEDURE SetMonitor(VAR Minitor IN A0 : MonitorPref);
- |
- | AllocBitMap(width IN D0,
- | height IN D1,
- | depth IN D2 : CARDINAL;
- | type IN A0 : SysStringPtr):EBitMapPtr;
- |
- |
- | type:
- | NIL : BitMap Strktur wie Visiona
- | "VISIONA:" : Speicher auf der Visiona Karte
- |
- |
- | Der empfohlene Weg, eine EBitMap zu initialisieren. Diese Struktur
- | bildet das Rückrat aller Graphikoperationen. Die Parameter "width",
- | "height" und "depth" bestimmen die Größe des Speicherbereiches.
- |
- | Soll die BitMap angezeigt werden können, muß Graphikspeicher verwendet
- | werden. Dazu muß bei "vmem" TRUE angegeben werden. Wird "FALSE" angegeben,
- | wird erst versucht FastMem zu allozieren, da dies schneller, und vor allem
- | billiger ist.
- |
- | Die BitMap wird nicht gelöscht !!!
- |
- LIBRARY EGSBase BY-126 PROCEDURE OldAllocBitMap(width IN D0,
- height IN D1,
- depth IN D2 : CARDINAL;
- type IN A0 : SysStringPtr):EBitMapPtr;
-
- TYPE
- EBitMapFlags = (displayable,blitable,swapable,notswapable,clearmap,ebf31=31);
- EBitMapFlagSet = SET OF EBitMapFlags;
-
- LIBRARY EGSBase BY-198 PROCEDURE AllocBitMap(width IN D0,
- height IN D1,
- depth IN D2 : CARDINAL;
- type IN D3 : EBitMapType;
- flags IN D4 : EBitMapFlagSet;
- friend IN A0 : EBitMapPtr):EBitMapPtr;
- |
- | DisposeBitMap(Map IN A0 : EBitMapPtr);
- |
- | Gibt den Speicher einer EBitMap wieder frei. Dies sollte am Ende des Programms
- | auf jeden Fall erfolgen.
- |
- | " I. Amiga law : Remeber, you are not alone in here "
- |
- LIBRARY EGSBase BY-132 PROCEDURE DisposeBitMap(Map IN A0 : EBitMapPtr);
- |
- | ClearBitMap(Map IN A0 : EBitMapPtr);
- |
- | Löscht den Speicher einer angegebenen BitMap mit dem Farbwert 0.
- |
- LIBRARY EGSBase BY-138 PROCEDURE ClearBitMap(Map IN A0 : EBitMapPtr);
- |
- | PRIVAT !!!
- |
- LIBRARY EGSBase BY-144 PROCEDURE SetMouseExcept(callMe IN A0 : MouseExcept;
- data IN A1 : ANYPTR);
- LIBRARY EGSBase BY-150 PROCEDURE ResetMouseExcept;
- |
- | SetRGB8(scr IN A0 : EScreenPtr;
- | reg IN D0,
- | red IN D1,
- | green IN D2,
- | blue IN D3 : CARDINAL);
- |
- | Setzt eine Farbe für ein Farbregister der CLUT. Die Werte für die einzelnen
- | Farbkomponenten müssen im Bereich 0 bis 255 liegen. Es können je nach
- | Bittiefe bis zu 256 Register benutzt werden. Im 24-Bit Modus dient die
- | CLUT zur Gamma-Correction.
- |
- LIBRARY EGSBase BY -84 PROCEDURE SetRGB8(scr IN A0 : EScreenPtr;
- reg IN D0,
- red IN D1,
- green IN D2,
- blue IN D3 : CARDINAL);
- |
- | GetRGB8(scr IN A0 : EScreenPtr;reg IN D0 : INTEGER):LONGINT;
- |
- | Das Ergebniss kann in ein CLUEntry gecastet werden, hat also das Format:
- |
- | RRRR RRRR GGGG GGGG BBBB BBBB .... ....
- |
- LIBRARY EGSBase BY-156 PROCEDURE GetRGB8(scr IN A0 : EScreenPtr;
- reg IN D0 : INTEGER):LONGINT;
- |
- | PROCEDURE SetRGB8CM(scr IN A0 : EScreenPtr;
- | colors IN A1 : CLUPtr;
- | start IN D0,
- | num IN D1 : INTEGER);
- |
- | Setzt eine angegebene Anzahl aufeinanderfolgender Farbregister neu. Die Summe
- | aus 'start' und 'num' darf dabei die Anzahl der vorhandenen Farbregister
- | nicht überschreiten.
- |
- LIBRARY EGSBase BY-174 PROCEDURE SetRGB8CM(scr IN A0 : EScreenPtr;
- colors IN A1 : CLUPtr;
- start IN D0,
- num IN D1 : INTEGER);
- |
- | PROCEDURE GetRGB8CM(scr IN A0 : EScreenPtr;
- | colors IN A1 : CLUPtr;
- | start IN D0,
- | num IN D1 : INTEGER);
- |
- | Kopiert einen Ausschnitt aus der Farbtabelle einer Screen in eine eigene.
- |
- LIBRARY EGSBase BY-186 PROCEDURE GetRGB8CM(scr IN A0 : EScreenPtr;
- colors IN A1 : CLUPtr;
- start IN D0,
- num IN D1 : INTEGER);
- |
- | PRIVAT !!!
- |
- LIBRARY EGSBase BY-162 PROCEDURE RecalcScreen(scr IN A0 : EScreenPtr);
- |
- | PROCEDURE FlipMap(scr IN A0 : EScreenPtr;
- | map IN A1 : EBitMapPtr):EBitMapPtr;
- |
- | Häufig (besonders bei Animationen) ist es nötig zwischen zwei Bildschirm-
- | speicherbereichen hin und her zu schalten, ohne daß dabei der Darstellungs-
- | modus geändert, und das Sync-Timing kurz unterbrochen wird.
- |
- | Mit 'FlipMap' kann einem Screen eine andere 'BitMap' zugeordnet werden. Diese
- | BitMap wird dann vom nächsten Frame ab anstatt der bisherigen gezeigt (wenn
- | die Screen die vorderste war). Es entstehen dabei keine unnötigen Flakker-
- | effekte.
- |
- | Die Prozedur liefert einen Zeiger auf die alte BitMap zurück. Besonders
- | empfehlenswert ist in diesem Zusammenhang die Screen mit einer eigenen BitMap
- | zu öffnen.
- |
- LIBRARY EGSBase BY-168 PROCEDURE FlipMap(scr IN A0 : EScreenPtr;
- map IN A1 : EBitMapPtr):EBitMapPtr;
- |
- | Um eine möglichst hohe kompatibilität zwischen einzelnen Karten zu ermöglichen
- | muß die Library eine Funktion zur Verfügung stellen, mit der Informationen
- | zur aktuellen Karte erhalten werden könne, unter anderem auch die möglichen
- | Auflösungen.
- |
- | Diese Aufgabe erfüllt die HardInfo-Struktur und die Prozedur 'GetHardInfo'
- |
- TYPE
- HardInfoFlags = (hardBlitter,hardBootrom,hardVBlank,hardRealMode,
- hardGammaCorrect,hardPlanes,clockStable,
- hardBigMouse64,hardSmallMouse16,
- dither64,h10,h11,h12,h13,h14,h15,h16);
- HardInfoFlagSet = SET OF HardInfoFlags;
-
- HardInfoPtr = POINTER TO HardInfo;
- HardInfo = RECORD
- product,
- manufact,
- name : SysStringPtr;
- version,
- maxFreq : INTEGER;
- flags : HardInfoFlagSet;
- modes : Exec.ListPtr;
- actPixClock : INTEGER; | in 100tel MHz
- frameTime : INTEGER; | in ms
- memBase : ANYPTR;
- memSize : LONGINT;
- libDate : SysStringPtr;
- frame : LONGINT;
- END;
- |
- LIBRARY EGSBase BY-180 PROCEDURE GetHardInfo():HardInfoPtr;
- |
- LIBRARY EGSBase BY-192 PROCEDURE WaitTOF;
-
- | last is -198 AllocBitMap
-
- GROUP
- MemoryGrp = EMemNode,AllocEMem,DisposeEMem;
- BitMapGrp = EBitMap,EBitMapPtr,
- AllocBitMap,DisposeBitMap,ClearBitMap;
- ColorGrp = CLU,CLUEntry,CLUPtr,
- SetRGB8,GetRGB8,SetRGB8CM,GetRGB8CM;
- MouseGrp = SoftMouse,SoftMousePtr,EMousePtr,EMouse,
- MouseOn,MouseOff,ModifyMouse;
- ScreenGrp = EScreenPtr,NewEScreen,EScrFlags,EScrFlagSet,
- EDCMPFlags,EDCMPFlagSet,
- MouseOn,MouseOff,
- OpenScreen,CloseScreen,ScreenToFront,ScreenToBack;
- MessageGrp= EDCMPFlags,EDCMPFlagSet,
- EGSMsgPtr,QualifierSet,
- Exec.GetMsg,Exec.WaitPort,Exec.ReplyMsg,
- ModifyEDCMP;
- |
- | PRIVAT !!!!
- |
- ViewGrp = EViewPtr,G300Control,G300ControlSet,
- MonitorPref,HelpMode,ScreenMode,
- AddScreenMode,DelScreenMode,
- SetMonitor;
-
- END EGS.
-